package org.jaaksi.demo.ptr.widegit;

import android.content.Context;
import android.view.*;
import android.widget.PopupWindow;
import org.jaaksi.demo.ptr.R;

import java.util.HashSet;

/**
 * Created by Fcy on 2016/2/3.<br/>
 * 建议使用不获取焦点的时候，采用popupwindow, 获取焦点的使用dialog
 */
public class LoadingBar extends PopupWindow
{
	/**
	 * 用于存储多个loadingbar同时要显示，所有任务结束后才关闭
	 */
	private HashSet<String> tags = new HashSet<String>();

	public LoadingBar(Context context)
	{
		this(context, false);
	}

	public LoadingBar(Context context, boolean isFocusable)
	{
		super(WindowManager.LayoutParams.WRAP_CONTENT,
		        WindowManager.LayoutParams.WRAP_CONTENT);
		View view = LayoutInflater.from(context).inflate(R.layout.lib_loading,
		        null);
		// 如果设置了聚焦，如果没有设置setBackgroundDrawable将无法响应返回键
		// 如果设置了，将由PopupWindow响应返回键，Activity无法响应，且点击PopupWindow外部消失
		setFocusable(isFocusable);
		// 是否点击外部消失，必须设置setBackgroundDrawable,否则无效
		// setOutsideTouchable(false);

		// 如果设置了setBackgroundDrawable且设置聚焦，
		// 则setOutsideTouchable无论是true还是false都会消失
		// setBackgroundDrawable(new ColorDrawable());
		setContentView(view);
	}

	@Override
	public void showAtLocation(View parent, int gravity, int x, int y)
	{
		super.showAtLocation(parent, Gravity.CENTER, 0, 0);
	}

	public void show(View parentView)
	{
		show(parentView, null);
	}

	/**
	 * 点击的view即可
	 *
	 * @param parentView
	 */
	public void show(View parentView, String tag)
	{
		if (parentView == null)
			throw new IllegalArgumentException("no parent view");
		if (tag != null)
		{
			tags.add(tag);
		}
		showAtLocation(parentView, Gravity.CENTER, 0, 0);
	}

	@Override
	public void dismiss()
	{
		tags.clear();
		super.dismiss();
	}

	/**
	 * 如果有可能多个loading
	 * 
	 * @param tag
	 */
	public void close(String tag)
	{
		if (tag == null)
		{
			dismiss();
		}
		else
		{
			if (tags.contains(tag))
			{
				tags.remove(tag);
			}

			if (tags.size() == 0)
			{
				dismiss();
			}
		}
	}

}
